package fr.dauphine.bookstore.modele;

import java.io.Serializable;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

/**
 * Classe abstraite persistente.
 */
@MappedSuperclass
public abstract class Persistent implements Serializable {

	/**
	 * Serial version UID.
	 */
	private static final long serialVersionUID = 7633642850732459691L;

	/**
	 * Identifiant interne.
	 */
	private Long id;

	// Methodes Get&Set

	/**
	 * Retourne l'identifiant interne.
	 * 
	 * @return Identifiant interne
	 */
	@Id
	@GeneratedValue
	public final Long getId() {
		return this.id;
	}

	/**
	 * Met a jour l'identifiant interne.
	 * 
	 * @param id
	 *            Identifiant interne
	 */
	public final void setId(final Long id) {
		this.id = id;
	}

	// Surcharges

	/**
	 * Teste l'egalite avec un objet persistant.
	 * 
	 * @param that
	 *            Objet persitant
	 * @return Vrai si l'objet that est egal a l'objet courant, faux sinon
	 */
	protected final boolean equals(final Persistent that) {
		return (getId() != null && getId().equals(that.getId()));
	}

	/**
	 * Retourne le Hash code.
	 * 
	 * @return Hash code
	 */
	public final int hashCode() {
		if (getId() == null) {
			return 0;

		} else {
			return getId().hashCode();
		}
	}
}
